<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Класс для работы с системными (админовскими) настройками (переменными)
 * 
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Variables {
   
   /**
    * Instance
    *
    * @access private
    * @var object
    */
   var $_obj = null;
   
   /**
    * Кэш переменных из базы
    *
    * @access private
    * @var array
    */
   var $_variables = array();
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return Variables
    */
   function Variables() {
      $this->_obj =& get_instance();
      $this->_load_variables();
   } // end Variables
   
   /**
    * Подгрузка переменных из базы
    *
    * @access private
    */
   function _load_variables() {
      $this->_variables = array();
      $sql = "
         SELECT
            name,
            value
         FROM
            " . $this->_obj->db->dbprefix('variables') . "
      ";
      $query = $this->_obj->db->query($sql);
      if (0 < $query->num_rows()) {
         foreach ($query->result_array() as $value) {
            $this->_variables[$value['name']] = $value['value'];
         }
      }
   } // end _load_variables
   
   /**
    * Получение системного параметра
    *
    * @access public
    * @param string $name
    * @param mixed $default
    * @return mixed
    */
   function get($name, $default = false) {
      return isset($this->_variables[$name]) ? $this->_variables[$name] : $default;
   } // end get
   
   /**
    * Установка системного параметра
    *
    * @access public
    * @param string $name
    * @param mixed $value
    */
   function set($name, $value) {
      if (isset($this->_variables[$name])) {
         $this->_variables[$name] = $value;
         $sql = "
            UPDATE
               " . $this->_obj->db->dbprefix('variables') . "
            SET
               value = " . $this->_obj->db->escape($value) . "
            WHERE
               name = " . $this->_obj->db->escape($name) . "
            LIMIT
               1
         ";
         $this->_obj->db->query($sql);
      }
   } // end set
   
   /**
    * Insert param
    * 
    * @param string $name
    * @param mixed $value
    */
   function insert($name, $value) {
       if (isset($this->_variables[$name])) {
           $this->set($name, $value);
       } else {
           $this->_variables[$name] = $value;
           $sql = "
               INSERT INTO
                   " . $this->_obj->db->dbprefix('variables') . " (
                   name,
                   value
               ) VALUES (
                   " . $this->_obj->db->escape($name) . ",
                   " . $this->_obj->db->escape($value) . "
               )
           ";
           $this->_obj->db->query($sql);
       }
   }
   
}
